package br.ucb.servlets;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.ucb.enumeradores.TempoUso;
import br.ucb.exceptions.PersistenceException;
import br.ucb.modelo.dao.BazarDAO;
import br.ucb.modelo.dao.CompraDAO;
import br.ucb.modelo.dao.ProdutoDAO;
import br.ucb.modelo.negocio.Bazar;
import br.ucb.modelo.negocio.Compra;
import br.ucb.modelo.negocio.ItemEstoque;
import br.ucb.modelo.negocio.Produto;
import br.ucb.modelo.negocio.User;
import br.ucb.service.Servicos;
import br.ucb.service.Validacao;

@WebServlet("/controleprodutos")
public class ControleProdutos extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String pagina = "bazar.jsp";
		RequestDispatcher disp;
		User user = null;
		HttpSession session = request.getSession();
		Produto produto;
		String acao = request.getParameter("acao");
		if(acao.equals("cadastrar")) {
			pagina = "uploadImage.jsp";
			if(!Validacao.validaProduto(request)) {
			    pagina = "cadastraProduto.jsp";
			    request.setAttribute("temposUso", TempoUso.NOVO);
			} else {
			  request.setAttribute("cadastrar", "");
	    	  produto = Servicos.montaProdutoRequest(request);	
	    	  session.setAttribute("produto", produto);
			}
			Bazar bazar = (Bazar) session.getAttribute("bazar");
			request.setAttribute("produtos", Servicos.obtemProdutosBazar(bazar.getId(), new ProdutoDAO()));
		} else if(acao.equals("alterar")) {
			pagina = "uploadImage.jsp";
			produto = Servicos.montaProdutoRequest(request);
			if(!Validacao.validaProduto(request)) {
			    pagina = "alterarProduto.jsp";
			    request.setAttribute("temposUso", TempoUso.NOVO);
			} else {
				request.setAttribute("alterar", "");
				session.setAttribute("produto", produto);
			}
			Bazar bazar = (Bazar) session.getAttribute("bazar");
			request.setAttribute("produtos", Servicos.obtemProdutosBazar(bazar.getId(), new ProdutoDAO()));
		} else if(acao.equals("excluir")) {
			pagina = "bazar.jsp";
			if(Servicos.deletaProduto(Long.parseLong(request.getParameter("id")), new ProdutoDAO()))
				request.setAttribute("sucessoExcluirProduto", "");
			else
				request.setAttribute("falhaExcluirProduto", "");
			Bazar bazar = (Bazar) session.getAttribute("bazar");
			request.setAttribute("produtos", Servicos.obtemProdutosBazar(bazar.getId(), new ProdutoDAO()));
			session.setAttribute("bazar", bazar);
		} else if(acao.equals("listaBazar")) {
			pagina = "bazar.jsp";
			user = (User) session.getAttribute("usuario");
			try {
				session.setAttribute("bazar", new BazarDAO().findById(user.getId()));
			} catch (PersistenceException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				request.setAttribute("erroBancoDados", "");
			}
			Bazar bazar = (Bazar) session.getAttribute("bazar");
			if(bazar== null) {
				request.setAttribute("semBazar", "");
			} else {
			  List <Produto> produtos = Servicos.obtemProdutosBazar(user.getId(), new ProdutoDAO());
			  request.setAttribute("produtos", produtos);
		      session.setAttribute("produtos", produtos);
			}
		} else if(acao.equals("criarBazar")) {
			pagina = "bazar.jsp";
			user = (User) session.getAttribute("usuario");
			if(Servicos.cadastraBazar(user.getId(), new BazarDAO()))
				request.setAttribute("sucessoCadastroBazar", "");
			else
				request.setAttribute("erroCadastroBazar", "");
			user = (User) session.getAttribute("usuario");
			try {
				session.setAttribute("bazar", new BazarDAO().findById(user.getId()));
			} catch (PersistenceException e) {
				e.printStackTrace();
				request.setAttribute("erroBancoDados", "");
			}
			Bazar bazar = (Bazar) session.getAttribute("bazar");
			if(bazar == null) {
				request.setAttribute("semBazar", "");
			}
		} else if(acao.equals("direcionarCadastro")) {
			pagina = "cadastraProduto.jsp";
			request.setAttribute("temposUso", TempoUso.NOVO);
		} else if(acao.equals("direcionarAlteracao")) {
			pagina = "alterarProduto.jsp";
			Long idProduto = Long.parseLong(request.getParameter("id"));
			request.setAttribute("temposUso", TempoUso.NOVO);
			produto = Servicos.obtemProdutoPorId(idProduto);
			if(produto != null)
			  request.setAttribute("produto", produto);
			else {
			  request.setAttribute("erroObterProdutoAlterar", "");
			}
		} else if(acao.equals("visualizarTodosProdutos")) {
			pagina = "visualizarProdutos.jsp";
			List<ItemEstoque> itens = Servicos.obtemProdutosVenda(request, new ProdutoDAO());
			session.setAttribute("itens", itens);
		} else if(acao.equals("visualizarDadosProduto")) {
			pagina = "visualizarDadosProduto.jsp";
			List <ItemEstoque> itens = (List <ItemEstoque>) session.getAttribute("itens");
			request.setAttribute("produto", Servicos.findProdutoVisualizar(itens, request));
			if(session.getAttribute("usuario") == null || session.getAttribute("usuario") == "") {
				request.setAttribute("precisoLogarComprar", "");
			}
		} else if(acao.equals("realizarCompraLogado")) {
			pagina = "visualizarProdutos.jsp";
			user = (User) session.getAttribute("usuario");
			session.setAttribute("itens", Servicos.obtemProdutosVendaLogin(request, user.getId(), new ProdutoDAO()));
		} else if(acao.equals("comprar")) {
			pagina = "visualizarProdutos.jsp";
			user = (User) session.getAttribute("usuario");
			Servicos.realizaCompra(request, new CompraDAO(), new ProdutoDAO(), user);
			session.setAttribute("itens", Servicos.obtemProdutosVendaLogin(request, user.getId(), new ProdutoDAO()));
		} else if(acao.equals("comprar")) {
			pagina = "visualizarProdutos.jsp";
			user = (User) session.getAttribute("usuario");
			Servicos.realizaCompra(request, new CompraDAO(), new ProdutoDAO(), user);
			session.setAttribute("itens", Servicos.obtemProdutosVendaLogin(request, user.getId(), new ProdutoDAO()));
		} else if(acao.equals("historicoCompras")) {
			pagina = "historico.jsp";
			request.setAttribute("historicoCompras", "");
			user = (User) session.getAttribute("usuario");
			session.setAttribute("historico", Servicos.obtemHistoricoCompra(request, user.getId()));
		} else if(acao.equals("historicoVendas")) {
			pagina = "historico.jsp";
			user = (User) session.getAttribute("usuario");
			session.setAttribute("historico", Servicos.obtemHistoricoVenda(request, user.getId()));
		} else if(acao.equals("visualizaProdutoVenda")) {
			pagina = "visualizaProdutoVenda.jsp";
			List <Compra> compras = (List <Compra>) session.getAttribute("historico");
			request.setAttribute("produto", Servicos.findProduto(compras, request));
		} else if(acao.equals("excluiVenda")) {
			pagina = "historico.jsp";
			List <Compra> compras = (List <Compra>) session.getAttribute("historico");
			Compra compra = Servicos.findProduto(compras, request);
			Servicos.excluiVenda(request, compra);
			user = (User) session.getAttribute("usuario");
			if(request.getParameter("tipoTabela").equals("comprador")) {
			  session.setAttribute("historico", Servicos.obtemHistoricoCompra(request, user.getId()));
			  request.setAttribute("historicoCompras", "");
			}else
		      session.setAttribute("historico", Servicos.obtemHistoricoVenda(request, user.getId()));
		}
		disp = request.getRequestDispatcher(pagina);
		disp.forward(request, response);
	}

}
